package bndtools.wizards.bndfile; import java.text.MessageFormat; import java.util.Collection; import java.util.Collections; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.PlatformUI; import bndtools.Plugin; public class EnableSubBundlesDialog extends TitleAreaDialog { private boolean enableSubBundles = true; private final Collection<String> allProperties; private final Collection<String> selectedProperties; private Table propsTable; private CheckboxTableViewer viewer; private Button btnCheckAll; private Button btnUncheckAll; private Link link; private Button btnEnableSubbundles; private Label lblHeaderCount; /** * Create the dialog. * * @param parentShell */ public EnableSubBundlesDialog(Shell parentShell, Collection<String> allProperties, Collection<String> selectedProperties) { super(parentShell); setShellStyle(SWT.CLOSE | SWT.MAX | SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL | SWT.RESIZE | getDefaultOrientation()); this.allProperties = allProperties; this.selectedProperties = selectedProperties; setHelpAvailable(true); setDialogHelpAvailable(true); } /** * Create contents of the dialog. * * @param parent */ @SuppressWarnings("unused") @Override protected Control createDialogArea(Composite parent) { setMessage(Messages.EmptyBndFileWizard_questionSubBundlesNotEnabled); setTitle("Sub-bundles not enabled"); Composite area = (Composite) super.createDialogArea(parent); Composite container = new Composite(area, SWT.NONE); GridLayout layout = new GridLayout(2, false); layout.marginTop = 20; layout.marginWidth = 10; layout.verticalSpacing = 10; container.setLayout(layout); container.setLayoutData(new GridData(GridData.FILL_BOTH)); btnEnableSubbundles = new Button(container, SWT.CHECK); btnEnableSubbundles.setText(Messages.EnableSubBundlesDialog_btnEnableSubbundles_text_3); btnEnableSubbundles.setSelection(enableSubBundles); new Label(container, SWT.NONE); link = new Link(container, SWT.NONE); link.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); link.setText(Messages.EnableSubBundlesDialog_link_text); link.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { getShell().notifyListeners(SWT.Help, new Event()); } }); propsTable = new Table(container, SWT.BORDER | SWT.CHECK | SWT.FULL_SELECTION); GridData gd_propsTable = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2); gd_propsTable.heightHint = 100; gd_propsTable.widthHint = 175; propsTable.setLayoutData(gd_propsTable); viewer = new CheckboxTableViewer(propsTable); viewer.setContentProvider(ArrayContentProvider.getInstance()); viewer.setInput(allProperties); viewer.setCheckedElements(selectedProperties.toArray()); btnCheckAll = new Button(container, SWT.NONE); btnCheckAll.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnCheckAll.setText(Messages.EnableSubBundlesDialog_btnCheckAll_text); btnUncheckAll = new Button(container, SWT.NONE); btnUncheckAll.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 1)); btnUncheckAll.setText(Messages.EnableSubBundlesDialog_btnUncheckAll_text); lblHeaderCount = new Label(container, SWT.NONE); lblHeaderCount.setText(MessageFormat.format("", allProperties.size())); new Label(container, SWT.NONE); // Spacer btnEnableSubbundles.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { enableSubBundles = btnEnableSubbundles.getSelection(); updateEnablement(); } }); viewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { String property = (String) event.getElement(); if (event.getChecked()) selectedProperties.add(property); else selectedProperties.remove(property); } }); btnCheckAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { selectedProperties.clear(); selectedProperties.addAll(allProperties); viewer.setCheckedElements(selectedProperties.toArray()); } }); btnUncheckAll.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { selectedProperties.clear(); viewer.setCheckedElements(selectedProperties.toArray()); } }); PlatformUI.getWorkbench().getHelpSystem().setHelp(getShell(), Plugin.PLUGIN_ID + ".enableSubBundles"); return area; } void updateEnablement() { btnCheckAll.setEnabled(enableSubBundles); btnUncheckAll.setEnabled(enableSubBundles); propsTable.setEnabled(enableSubBundles); } @Override protected Point getInitialSize() { return new Point(475, 330); } public boolean isEnableSubBundles() { return enableSubBundles; } public Collection<String> getSelectedProperties() { return Collections.unmodifiableCollection(selectedProperties); } }